package com.lemo.juc;

/**
 * 
 * @className: VolatileDemo
 * @description: volatile 关键字：当多个线程进行操作共享数据时，可以保证内存中的数据可见。相较于 synchronized
 *               是一种较为轻量级的同步策略。
 *               注意：
 * 				 1. volatile 不具备“互斥性”
 *               2. volatile 不能保证变量的“原子性”
 * @author liming
 * @date 2017年1月20日 下午3:37:18
 *
 */
public class VolatileDemo {

	public static void main(String[] args) {
		ThreadDemo tDemo = new ThreadDemo();
		new Thread(tDemo).start();

		while (true) {
			if (tDemo.isFlag()) {
				System.out.println("------------");
				break;
			}
		}

	}

}

class ThreadDemo implements Runnable {

	private boolean flag = false;

	@Override
	public void run() {
		try {
			Thread.sleep(2000);
			flag = true;
			System.out.println("flag:" + isFlag());
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

	}

	public boolean isFlag() {
		return flag;
	}

	public void setFlag(boolean flag) {
		this.flag = flag;
	}

}